#!/bin/bash

###########################
# 用于修复BC-Linux kcs集群龙蜥系统版本操作系统主要基线问题
# 作者：王文斌
# 时间：2024-07-11
# 版本：v1.0
###########################

# 设置文件属性 先移除只读属性，用于创建用户
#chattr -i /etc/gshadow
#chattr -i /etc/shadow
#chattr -i /etc/group
#chattr -i /etc/passwd

user="dict"
password="qnhOwfz!#1BR"
#先删除dict用户
userdel $user
#再创建dict用户
useradd $user
echo $password | passwd --stdin "dict" &> /dev/null


# 添加远程用户允许sudo操作
file_path="/etc/sudoers"
keyword="$user ALL=(ALL) ALL"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

#创建一个500以上的用户组及用户
groupadd reader
useradd -m -g reader reader



# 设置重要目录权限
chmod 750 /etc/rc.d/init.d
chmod 750 /tmp
chmod 750 /etc/rc5.d
chmod 750 /etc/rc4.d
chmod 750 /etc/rc0.d
chmod 750 /etc/rc6.d
chmod 750 /etc/rc2.d
chmod 750 /etc/rc1.d
chmod 750 /etc/rc3.d
chmod 600 /etc/security
chmod 644 /etc/group

#umask
#text="umask 022"
#file_path="/etc/bashr"
#echo "$text" >> $file_path

# 生效
#source /etc/bashrc

# 设置文件属性
#chattr +i /etc/gshadow
#chattr +i /etc/shadow
#chattr +i /etc/group
#chattr +i /etc/passwd


# 设置root用户禁止远程登录
# 禁止telnet root登陆
file_path="/etc/pam.d/login"
keyword="auth       required     pam_securetty.so"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi
# 禁止root远程登录
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd


# 检查文件/etc/login.defs中如下配置项是否设置为yes并未被注释：LASTLOG_ENAB、FAILLOG_ENAB
file_path="/etc/login.defs"
keyword="LASTLOG_ENAB    yes"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi
keyword="FAILLOG_ENAB    yes"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

# 系统中不允许存在如下开发工具和编译工具：
#Tcpdump   Gdb   strace   dexdump   cpp   gcc
#tcpdump、ethereal、wireshark等嗅探工具不允许出现在系统上，防止被恶意使用
wait $!
yum remove -y tcpdump
wait $!
yum remove -y wireshark
wait $!
yum remove -y ethereal
wait $!
yum remove -y gdb
wait $!
yum remove -y strace
wait $!
yum remove -y dexdump
wait $!
yum remove -y cpp
wait $!
yum remove -y gcc
wait $!


#修改umask到027
sed -i 's/umask 022/umask 027/' /etc/profile
sed -i 's/umask 022/umask 027/' /etc/csh.cshrc
sed -i 's/umask 022/umask 027/' /etc/bashrc


#修改PASS_WARN_AGE 8
sed -i 's/PASS_WARN_AGE    30/PASS_WARN_AGE    8/' /etc/bashrc

# 设置命令行界面超时时间
file_path="/etc/profile"
keyword="export TMOUT=600"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

# 检查/etc/security/limits.conf是否设置* soft core 0  * hard core 0
file_path="/etc/security/limits.conf"
keyword="* soft core 0"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo "* soft core 0" >> $file_path
fi
keyword="* hard core 0"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo "* hard core 0" >> $file_path
fi

# 禁用CTRL+ALT+DEL
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
init q

# 检查历史命令设置
file_path="/etc/profile"
keyword="HISTFILESIZE=1000"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

# 检查是否配置账户认证失败次数限制
file_path="/etc/pam.d/system-auth"
keyword="auth required pam_faillock.so preauth audit deny=5 unlock_time=900 no_lock_time"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

keyword="account     required      pam_faillock.so"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

#检查是否配置SSH方式账户认证失败次数限制
file_path="/etc/pam.d/sshd"
keyword="auth required pam_faillock.so preauth audit deny=5 unlock_time=900 no_lock_time"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi
keyword="account required pam_faillock.so"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

# 检查是否限制远程登录IP范围
# 待定

# 检查是否配置关闭IP伪装  linux7.5不再支持nospoof命令了
#file_path="/etc/host.conf"
#keyword="nospoof on"
#if grep -q "$keyword" "$file_path"; then
#    echo "文件 $file_path 中存在关键字 $keyword"
#else
#    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
#    echo $keyword >> $file_path
#fi

# SEC-CI-HT-649
file_path="/etc/pam.d/password-auth"
keyword="auth        required    pam_faillock.so  deny=5 unlock_time=900"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

# SEC-CI-HT-615
file_path="/etc/logrotate.d/syslog"
keyword="rotate 3"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

# SEC-CI-HT-648
file_path="/etc/logrotate.d/syslog"
keyword="size 10M"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

#SEC-CI-HT-613
#修改umask到027
sed -i 's/umask 002/umask 027/' /etc/profile
sed -i 's/umask 002/umask 027/' /etc/csh.cshrc
sed -i 's/umask 002/umask 027/' /etc/bashrc

#SEC-CI-HT-616
sed -i 's/# minlen = 8/minlen = 8/' /etc/security/pwquality.conf
sed -i 's/# dcredit = 0/dcredit = -1/' /etc/security/pwquality.conf
sed -i 's/# ucredit = 0/ucredit = -1/' /etc/security/pwquality.conf
sed -i 's/# lcredit = 0/lcredit = -1/' /etc/security/pwquality.conf
sed -i 's/# ocredit = 0/ocredit = -1/' /etc/security/pwquality.conf

# SEC-CI-HT-616
file_path="/etc/security/pwquality.conf"
keyword="enforce_for_root  root"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

#SEC-CI-HT-637
sed -i 's/PASS_MIN_DAYS    6/PASS_MIN_DAYS    5/' /etc/login.defs
sed -i 's/PASS_WARN_AGE    30/PASS_WARN_AGE    5/' /etc/login.defs



# 系统中不允许存在如下开发工具和编译工具：SEC-CI-HT-650 单独卸载gdb-headless
wait $!
yum remove -y gdb-headless-8.2-11.el8.x86_64
